package com.kunkun.subject.domain.handler.subject;

import com.kunkun.subject.common.enums.SubjectInfoTypeEnum;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 题目类型工厂
 */
@Component
public class SubjectTypeHandlerFactory implements InitializingBean {

    @Resource    //通过 @Resource 注解注入的 SubjectTypeHandler 列表。这个列表包含了所有可用的 SubjectTypeHandler 实例
    private List<SubjectTypeHandler> subjectTypeHandlerList;

    private Map<SubjectInfoTypeEnum, SubjectTypeHandler> handlerMap = new HashMap<>();

    public SubjectTypeHandler getHandler(int subjectType) {
        SubjectInfoTypeEnum subjectInfoTypeEnum = SubjectInfoTypeEnum.getByCode(subjectType);
        return handlerMap.get(subjectInfoTypeEnum);
    }
//    afterPropertiesSet()：该方法是 InitializingBean 接口中的方法，在 Spring 完成 bean 属性的初始化后会调用。
//    在这里，该方法遍历 subjectTypeHandlerList，
//    并将每个处理器的类型（subjectTypeHandler.getHandlerType()）与处理器本身存入 handlerMap 中，以便后续快速查找。
    @Override
    public void afterPropertiesSet() throws Exception {
        for (SubjectTypeHandler subjectTypeHandler : subjectTypeHandlerList) {
            handlerMap.put(subjectTypeHandler.getHandlerType(), subjectTypeHandler);
        }
    }

}

